/*

Boost Software License - Version 1.0 - August 17th, 2003

Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:

The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

*/
module derelict.tcod.functions;

private
{
    import derelict.tcod.types;
}

version(DerelictTCOD_NoUnicode)
    enum noUnicode = true;
else
    enum noUnicode = false;

// console.h
TCOD_bkgnd_flag_t TCOD_BKGND_ALPHA(float alpha)
{
    return cast(TCOD_bkgnd_flag_t)(TCOD_BKGND_ALPH|((cast(uint8)(alpha*255))<<8));
}

TCOD_bkgnd_flag_t TCOD_BKGND_ADDALPHA(float alpha)
{
    return cast(TCOD_bkgnd_flag_t)(TCOD_BKGND_ADDA|((cast(uint8)(alpha*255))<<8));
}

// fov_types.h
TCOD_fov_algorithm_t FOV_PERMISSIVE(int x)
{
    return FOV_PERMISSIVE_0 + x;
}

extern(C)
{
    // bresenham.h
    alias nothrow void function(int, int, int, int) da_TCOD_line_init;
    alias nothrow uint8 function(int*, int*) da_TCOD_line_step;
    alias nothrow uint8 function(int, int, int, int, TCOD_line_listener_t) da_TCOD_line;
    alias nothrow void function(int, int, int, int, TCOD_bresenham_data_t*) da_TCOD_line_init_mt;
    alias nothrow uint8 function(int*, int*, TCOD_bresenham_data_t*) da_TCOD_line_step_mt;
    alias nothrow uint8 function(int, int, int, int, TCOD_line_listener_t, TCOD_bresenham_data_t*) da_TCOD_line_mt;

    // bsp.h
    alias nothrow TCOD_bsp_t* function() da_TCOD_bsp_new;
    alias nothrow TCOD_bsp_t* function(int, int, int, int) da_TCOD_bsp_new_with_size;
    alias nothrow void function(TCOD_bsp_t*) da_TCOD_bsp_delete;
    alias nothrow TCOD_bsp_t* function(TCOD_bsp_t*) da_TCOD_bsp_left;
    alias nothrow TCOD_bsp_t* function(TCOD_bsp_t*) da_TCOD_bsp_right;
    alias nothrow TCOD_bsp_t* function(TCOD_bsp_t*) da_TCOD_bsp_father;
    alias nothrow uint8 function(TCOD_bsp_t*) da_TCOD_bsp_is_leaf;
    alias nothrow uint8 function(TCOD_bsp_t*, TCOD_bsp_callback_t, void*) da_TCOD_bsp_traverse_pre_order;
    alias nothrow uint8 function(TCOD_bsp_t*, TCOD_bsp_callback_t, void*) da_TCOD_bsp_traverse_in_order;
    alias nothrow uint8 function(TCOD_bsp_t*, TCOD_bsp_callback_t, void*) da_TCOD_bsp_traverse_post_order;
    alias nothrow uint8 function(TCOD_bsp_t*, TCOD_bsp_callback_t, void*) da_TCOD_bsp_traverse_level_order;
    alias nothrow uint8 function(TCOD_bsp_t*, TCOD_bsp_callback_t, void*) da_TCOD_bsp_traverse_inverted_level_order;
    alias nothrow uint8 function(TCOD_bsp_t*, int, int) da_TCOD_bsp_contains;
    alias nothrow TCOD_bsp_t* function(TCOD_bsp_t*, int, int) da_TCOD_bsp_find_node;
    alias nothrow void function(TCOD_bsp_t*, int, int, int, int) da_TCOD_bsp_resize;
    alias nothrow void function(TCOD_bsp_t*, uint8, int) da_TCOD_bsp_split_once;
    alias nothrow void function(TCOD_bsp_t*, TCOD_random_t, int, int, int, float, float) da_TCOD_bsp_split_recursive;
    alias nothrow void function(TCOD_bsp_t*) da_TCOD_bsp_remove_sons;

    // color.h
    alias nothrow TCOD_color_t function(uint8, uint8, uint8) da_TCOD_color_RGB;
    alias nothrow TCOD_color_t function(float, float, float) da_TCOD_color_HSV;
    alias nothrow uint8 function(TCOD_color_t, TCOD_color_t) da_TCOD_color_equals;
    alias nothrow TCOD_color_t function(TCOD_color_t, TCOD_color_t) da_TCOD_color_add;
    alias nothrow TCOD_color_t function(TCOD_color_t, TCOD_color_t) da_TCOD_color_subtract;
    alias nothrow TCOD_color_t function(TCOD_color_t, TCOD_color_t) da_TCOD_color_multiply;
    alias nothrow TCOD_color_t function(TCOD_color_t, float) da_TCOD_color_multiply_scalar;
    alias nothrow TCOD_color_t function(TCOD_color_t, TCOD_color_t, float) da_TCOD_color_lerp;
    alias nothrow void function(TCOD_color_t*, float, float, float) da_TCOD_color_set_HSV;
    alias nothrow void function(TCOD_color_t, float*, float*, float*) da_TCOD_color_get_HSV;
    alias nothrow float function(TCOD_color_t) da_TCOD_color_get_hue;
    alias nothrow void function(TCOD_color_t*) da_TCOD_color_set_hue;
    alias nothrow float function(TCOD_color_t) da_TCOD_color_get_saturation;
    alias nothrow void function(TCOD_color_t*) da_TCOD_color_set_saturation;
    alias nothrow float function(TCOD_color_t) da_TCOD_color_get_value;
    alias nothrow void function(TCOD_color_t*) da_TCOD_color_set_value;
    alias nothrow void function(TCOD_color_t*, float) da_TCOD_color_shift_hue;
    alias nothrow void function(TCOD_color_t*, float, float) da_TCOD_color_scale_HSV;
    alias nothrow void function(TCOD_color_t*, int, const(TCOD_color_t)*, const(int)*) da_TCOD_color_gen_map;

    // console.h
    alias nothrow void function(int, int, const(char)*, uint8, TCOD_renderer_t) da_TCOD_console_init_root;
    alias nothrow void function(const(char)*) da_TCOD_console_set_window_title;
    alias nothrow void function(uint8) da_TCOD_console_set_fullscreen;
    alias nothrow uint8 function() da_TCOD_console_is_fullscreen;
    alias nothrow uint8 function() da_TCOD_console_is_window_closed;
    alias nothrow void function(const(char)*, int, int, int) da_TCOD_console_set_custom_font;
    alias nothrow void function(int, int, int) da_TCOD_console_map_ascii_code_to_font;
    alias nothrow void function(int, int, int, int) da_TCOD_console_map_ascii_codes_to_font;
    alias nothrow void function(const(char)*, int, int) da_TCOD_console_map_string_to_font;
    alias nothrow void function(int, int, int, int) da_TCOD_console_set_dirty;
    alias nothrow void function(TCOD_console_t, TCOD_color_t) da_TCOD_console_set_default_background;
    alias nothrow void function(TCOD_console_t, TCOD_color_t) da_TCOD_console_set_default_foreground;
    alias nothrow void function(TCOD_console_t) da_TCOD_console_clear;
    alias nothrow void function(TCOD_console_t, int, int, TCOD_color_t, TCOD_bkgnd_flag_t) da_TCOD_console_set_char_background;
    alias nothrow void function(TCOD_console_t, int, int, TCOD_color_t) da_TCOD_console_set_char_foreground;
    alias nothrow void function(TCOD_console_t, int, int, int) da_TCOD_console_set_char;
    alias nothrow void function(TCOD_console_t, int, int, int, TCOD_bkgnd_flag_t) da_TCOD_console_put_char;
    alias nothrow void function(TCOD_console_t, int, int, int, TCOD_color_t, TCOD_color_t) da_TCOD_console_put_char_ex;
    alias nothrow void function(TCOD_console_t, TCOD_bkgnd_flag_t) da_TCOD_console_set_background_flag;
    alias nothrow TCOD_bkgnd_flag_t function(TCOD_console_t) da_TCOD_console_get_background_flag;
    alias nothrow void function(TCOD_console_t, TCOD_alignment_t) da_TCOD_console_set_alignment;
    alias nothrow TCOD_alignment_t function(TCOD_console_t) da_TCOD_console_get_alignment;
    alias nothrow void function(TCOD_console_t, int, int, const(char)*, ...) da_TCOD_console_print;
    alias nothrow void function(TCOD_console_t, int, int, TCOD_bkgnd_flag_t, TCOD_alignment_t, const(char)*, ...) da_TCOD_console_print_ex;
    alias nothrow int function(TCOD_console_t, int, int, int, int, const(char)*, ...) da_TCOD_console_print_rect;
    alias nothrow int function(TCOD_console_t, int, int, int, int, TCOD_bkgnd_flag_t, TCOD_alignment_t, const(char)*, ...) da_TCOD_console_print_rect_ex;
    alias nothrow int function(TCOD_console_t, int, int, int, int, const(char)*, ...) da_TCOD_console_get_height_rect;
    alias nothrow void function(TCOD_console_t, int, int, int, int, uint8, TCOD_bkgnd_flag_t) da_TCOD_console_rect;
    alias nothrow void function(TCOD_console_t, int, int, int, TCOD_bkgnd_flag_t) da_TCOD_console_hline;
    alias nothrow void function(TCOD_console_t, int, int, int, TCOD_bkgnd_flag_t) da_TCOD_console_vline;
    alias nothrow void function(TCOD_console_t, int, int, int, int, uint8, TCOD_bkgnd_flag_t, const(char)*, ...) da_TCOD_console_print_frame;

    static if(!noUnicode)
    {
        alias nothrow void function(const(wchar)*, int, int) da_TCOD_console_map_string_to_font_utf;
        alias nothrow void function(TCOD_console_t, int, int, const(wchar*), ...) da_TCOD_console_print_utf;
        alias nothrow void function(TCOD_console_t, int, int, TCOD_bkgnd_flag_t, TCOD_alignment_t, const(wchar)*, ...) da_TCOD_console_print_ex_utf;
        alias nothrow int function(TCOD_console_t, int, int, int, int, const(wchar)*, ...) da_TCOD_console_print_rect_utf;
        alias nothrow int function(TCOD_console_t, int, int, int, int, TCOD_bkgnd_flag_t, TCOD_alignment_t, const(wchar)*, ...) da_TCOD_console_print_rect_ex_utf;
        alias nothrow int function(TCOD_console_t, int, int, int, int, const(wchar*), ...) da_TCOD_console_get_height_rect_utf;
    }

    alias nothrow TCOD_color_t function(TCOD_console_t) da_TCOD_console_get_default_background;
    alias nothrow TCOD_color_t function(TCOD_console_t) da_TCOD_console_get_default_foreground;
    alias nothrow TCOD_color_t function(TCOD_console_t, int, int) da_TCOD_console_get_char_background;
    alias nothrow TCOD_color_t function(TCOD_console_t, int, int) da_TCOD_console_get_char_foreground;
    alias nothrow int function(TCOD_console_t, int, int) da_TCOD_console_get_char;
    alias nothrow void function(uint8, TCOD_color_t) da_TCOD_console_set_fade;
    alias nothrow uint8 function() da_TCOD_console_get_fade;
    alias nothrow TCOD_color_t function() da_TCOD_console_get_fading_color;
    alias nothrow void function() da_TCOD_console_flush;
    alias nothrow void function(TCOD_colctrl_t, TCOD_color_t, TCOD_color_t) da_TCOD_console_set_color_control;
    alias nothrow TCOD_key_t function(int) da_TCOD_console_check_for_keypress;
    alias nothrow TCOD_key_t function(uint8) da_TCOD_console_wait_for_keypress;
    alias nothrow void function(int, int) da_TCOD_console_set_keyboard_repeat;
    alias nothrow void function() da_TCOD_console_disable_keyboard_repeat;
    alias nothrow uint8 function(TCOD_keycode_t) da_TCOD_console_is_key_pressed;
    alias nothrow TCOD_console_t function(const(char)*) da_TCOD_console_from_file;
    alias nothrow uint8 function(TCOD_console_t, const(char)*) da_TCOD_console_load_asc;
    alias nothrow uint8 function(TCOD_console_t, const(char)*) da_TCOD_console_load_apf;
    alias nothrow uint8 function(TCOD_console_t, const(char)*) da_TCOD_console_save_asc;
    alias nothrow uint8 function(TCOD_console_t, const(char)*) da_TCOD_console_save_apf;
    alias nothrow TCOD_console_t function(int, int) da_TCOD_console_new;
    alias nothrow int function(TCOD_console_t) da_TCOD_console_get_width;
    alias nothrow int function(TCOD_console_t) da_TCOD_console_get_height;
    alias nothrow void function(TCOD_console_t, TCOD_color_t) da_TCOD_console_set_key_color;
    alias nothrow void function(TCOD_console_t, int, int, int, int, TCOD_console_t, int, int, float, float) da_TCOD_console_blit;
    alias nothrow void function(TCOD_console_t) da_TCOD_console_delete;
    alias nothrow void function() da_TCOD_console_credits;
    alias nothrow void function() da_TCOD_console_credits_reset;
    alias nothrow void function(int, int, uint8) da_TCOD_console_credits_render;

    // fov.h
    alias nothrow TCOD_map_t function(int, int) da_TCOD_map_new;
    alias nothrow void function(TCOD_map_t, uint8, uint8) da_TCOD_map_clear;
    alias nothrow void function(TCOD_map_t, TCOD_map_t) da_TCOD_map_copy;
    alias nothrow void function(TCOD_map_t, int, int, uint8, uint8) da_TCOD_map_set_properties;
    alias nothrow void function(TCOD_map_t) da_TCOD_map_delete;
    alias nothrow void function(TCOD_map_t, int, int, int, uint8, TCOD_fov_algorithm_t) da_TCOD_map_compute_fov;
    alias nothrow uint8 function(TCOD_map_t, int, int) da_TCOD_map_is_in_fov;
    alias nothrow void function(TCOD_map_t, int, int, uint8) da_TCOD_map_set_in_fov;
    alias nothrow uint8 function(TCOD_map_t, int, int) da_TCOD_map_is_transparent;
    alias nothrow uint8 function(TCOD_map_t, int, int) da_TCOD_map_is_walkable;
    alias nothrow int function(TCOD_map_t) da_TCOD_map_get_width;
    alias nothrow int function(TCOD_map_t) da_TCOD_map_get_height;
    alias nothrow int function(TCOD_map_t) da_TCOD_map_get_nb_cells;

    // heightmap.h
    alias nothrow TCOD_heightmap_t* function(int, int) da_TCOD_heightmap_new;
    alias nothrow void function(TCOD_heightmap_t*) da_TCOD_heightmap_delete;
    alias nothrow float function(const(TCOD_heightmap_t)*, int, int) da_TCOD_heightmap_get_value;
    alias nothrow float function(const(TCOD_heightmap_t)*, float, float) da_TCOD_heightmap_get_interpolated_value;
    alias nothrow void function(TCOD_heightmap_t*, int, int, float) da_TCOD_heightmap_set_value;
    alias nothrow float function(const(TCOD_heightmap_t)*, int, int) da_TCOD_heightmap_get_slope;
    alias nothrow void function(const(TCOD_heightmap_t)*, float, float, float*, float) da_TCOD_heightmap_get_normal;
    alias nothrow int function(const(TCOD_heightmap_t), float, float) da_TCOD_heightmap_count_cells;
    alias nothrow uint8 function(const(TCOD_heightmap_t)*, float) da_TCOD_heightmap_has_land_on_border;
    alias nothrow void function(const(TCOD_heightmap_t)*, float*, float*) da_TCOD_heightmap_get_minmax;
    alias nothrow void function(const(TCOD_heightmap_t)*, TCOD_heightmap_t*) da_TCOD_heightmap_copy;
    alias nothrow void function(TCOD_heightmap_t*, float) da_TCOD_heightmap_add;
    alias nothrow void function(TCOD_heightmap_t*, float) da_TCOD_heightmap_scale;
    alias nothrow void function(TCOD_heightmap_t*, float, float) da_TCOD_heightmap_clamp;
    alias nothrow void function(TCOD_heightmap_t*, float, float) da_TCOD_heightmap_normalize;
    alias nothrow void function(TCOD_heightmap_t*) da_TCOD_heightmap_clear;
    alias nothrow void function(const(TCOD_heightmap_t)*, const(TCOD_heightmap_t)*, TCOD_heightmap_t*, float) da_TCOD_heightmap_lerp_hm;
    alias nothrow void function(const(TCOD_heightmap_t)*, const(TCOD_heightmap_t)*, TCOD_heightmap_t*) da_TCOD_heightmap_add_hm;
    alias nothrow void function(const(TCOD_heightmap_t)*, const(TCOD_heightmap_t)*, TCOD_heightmap_t*) da_TCOD_heightmap_multiply_hm;
    alias nothrow void function(TCOD_heightmap_t*, float, float, float, float) da_TCOD_heightmap_add_hill;
    alias nothrow void function(TCOD_heightmap_t*, float, float, float, float) da_TCOD_heightmap_dig_hill;
    alias nothrow void function(TCOD_heightmap_t*, int*, int*, float, float, float, float) da_TCOD_heightmap_dig_bezier;
    alias nothrow void function(TCOD_heightmap_t*, int, float, float, TCOD_random_t) da_TCOD_heightmap_rain_erosion;
    alias nothrow void function(TCOD_heightmap_t*, int, const(int)*, const(int)*, const(float)*, float, float) da_TCOD_heightmap_kernel_transform;
    alias nothrow void function(TCOD_heightmap_t*, int, int, const(float)*, TCOD_random_t) da_TCOD_heightmap_add_voronoi;
    alias nothrow void function(TCOD_heightmap_t*, TCOD_noise_t, float, float, float, float, float, float, float) da_TCOD_heightmap_add_fbm;
    alias nothrow void function(TCOD_heightmap_t*, TCOD_noise_t, float, float, float, float, float, float, float) da_TCOD_heightmap_scale_fbm;
    alias nothrow void function(TCOD_heightmap_t*, float, TCOD_random_t) da_TCOD_heightmap_islandify;

    // image.h
    alias nothrow TCOD_image_t function(int, int) da_TCOD_image_new;
    alias nothrow TCOD_image_t function(TCOD_console_t) da_TCOD_image_from_console;
    alias nothrow void function(TCOD_image_t, TCOD_console_t) da_TCOD_image_refresh_console;
    alias nothrow TCOD_image_t function(const(char)*) da_TCOD_image_load;
    alias nothrow void function(TCOD_image_t, TCOD_color_t) da_TCOD_image_clear;
    alias nothrow void function(TCOD_image_t) da_TCOD_image_invert;
    alias nothrow void function(TCOD_image_t) da_TCOD_image_hflip;
    alias nothrow void function(TCOD_image_t, int) da_TCOD_image_rotate90;
    alias nothrow void function(TCOD_image_t) da_TCOD_image_vflip;
    alias nothrow void function(TCOD_image_t, int, int) da_TCOD_image_scale;
    alias nothrow void function(TCOD_image_t, const(char)*) da_TCOD_image_save;
    alias nothrow void function(TCOD_image_t, int*, int*) da_TCOD_image_get_size;
    alias nothrow TCOD_color_t function(TCOD_image_t, int, int) da_TCOD_image_get_pixel;
    alias nothrow int function(TCOD_image_t, int, int) da_TCOD_image_get_alpha;
    alias nothrow TCOD_color_t function(TCOD_image_t, float, float, float, float) da_TCOD_image_get_mipmap_pixel;
    alias nothrow void function(TCOD_image_t, int, int, TCOD_color_t) da_TCOD_image_put_pixel;
    alias nothrow void function(TCOD_image_t, TCOD_console_t, float, float, TCOD_bkgnd_flag_t, float, float, float) da_TCOD_image_blit;
    alias nothrow void function(TCOD_image_t, TCOD_console_t, int, int, int, int, TCOD_bkgnd_flag_t) da_TCOD_image_blit_rect;
    alias nothrow void function(TCOD_image_t, TCOD_console_t, int, int, int, int, int, int) da_TCOD_image_blit_2x;
    alias nothrow void function(TCOD_image_t) da_TCOD_image_delete;
    alias nothrow void function(TCOD_image_t, TCOD_color_t) da_TCOD_image_set_key_color;
    alias nothrow void function(TCOD_image_t, int, int) da_TCOD_image_is_pixel_transparent;

    // list.h
    alias nothrow TCOD_list_t function() da_TCOD_list_new;
    alias nothrow TCOD_list_t function(int) da_TCOD_list_allocate;
    alias nothrow TCOD_list_t function(TCOD_list_t) da_TCOD_list_duplicate;
    alias nothrow void function(TCOD_list_t) da_TCOD_list_delete;
    alias nothrow void function(TCOD_list_t, const(void)*) da_TCOD_list_push;
    alias nothrow void* function(TCOD_list_t) da_TCOD_list_pop;
    alias nothrow void* function(TCOD_list_t) da_TCOD_list_peek;
    alias nothrow void function(TCOD_list_t) da_TCOD_list_add_all;
    alias nothrow void* function(TCOD_list_t, int) da_TCOD_list_get;
    alias nothrow void function(TCOD_list_t, const(void)*, int) da_TCOD_list_set;
    alias nothrow void** function(TCOD_list_t) da_TCOD_list_begin;
    alias nothrow void** function(TCOD_list_t) da_TCOD_list_end;
    alias nothrow void function(TCOD_list_t) da_TCOD_list_reverse;
    alias nothrow void** function(TCOD_list_t, void**) da_TCOD_list_remove_iterator;
    alias nothrow void function(TCOD_list_t, const(void)*) da_TCOD_list_remove;
    alias nothrow void** function(TCOD_list_t, void**) da_TCOD_list_remove_iterator_fast;
    alias nothrow void function(TCOD_list_t, const(void)*) da_TCOD_list_remove_fast;
    alias nothrow uint8 function(TCOD_list_t, const(void)*) da_TCOD_list_contains;
    alias nothrow void function(TCOD_list_t) da_TCOD_list_clear;
    alias nothrow void function(TCOD_list_t) da_TCOD_list_clear_and_delete;
    alias nothrow int function(TCOD_list_t) da_TCOD_list_size;
    alias nothrow void** function(TCOD_list_t, const(void)*, int) da_TCOD_list_insert_before;
    alias nothrow uint8 function(TCOD_list_t) da_TCOD_list_is_empty;

    // mersenne.h
    alias nothrow TCOD_random_t function() da_TCOD_random_get_instance;
    alias nothrow TCOD_random_t function(TCOD_random_algo_t) da_TCOD_random_new;
    alias nothrow TCOD_random_t function(TCOD_random_t) da_TCOD_random_save;
    alias nothrow void function(TCOD_random_t, TCOD_random_t) da_TCOD_random_restore;
    alias nothrow TCOD_random_t function(TCOD_random_algo_t, uint32) da_TCOD_random_new_from_seed;
    alias nothrow void function(TCOD_random_t) da_TCOD_random_delete;
    alias nothrow void function(TCOD_random_t, TCOD_distribution_t) da_TCOD_random_set_distribution;
    alias nothrow int function(TCOD_random_t, int, int) da_TCOD_random_get_int;
    alias nothrow float function(TCOD_random_t, float, float) da_TCOD_random_get_float;
    alias nothrow double function(TCOD_random_t, double, double) da_TCOD_random_get_double;
    alias nothrow int function(TCOD_random_t, int, int, int) da_TCOD_random_get_int_mean;
    alias nothrow float function(TCOD_random_t, float, float, float) da_TCOD_random_get_float_mean;
    alias nothrow double function(TCOD_random_t, double, double, double) da_TCOD_random_get_double_mean;
    alias nothrow TCOD_dice_t function(const(char)*) da_TCOD_random_dice_new;
    alias nothrow int function(TCOD_random_t, TCOD_dice_t) da_TCOD_random_dice_roll;
    alias nothrow int function(TCOD_random_t, const(char)*) da_TCOD_random_dice_roll_s;

    // mouse.h
    alias nothrow void function(uint8) da_TCOD_mouse_show_cursor;
    alias nothrow TCOD_mouse_t function() da_TCOD_mouse_get_status;
    alias nothrow uint8 function() da_TCOD_mouse_is_cursor_visible;
    alias nothrow void function(int, int) da_TCOD_mouse_move;
    //alias nothrow void function(uint8) da_TCOD_mouse_includes_touch;

    // namegen.h
    alias nothrow void function(const(char)*, TCOD_random_t) da_TCOD_namegen_parse;
    alias nothrow char* function(char*, uint8) da_TCOD_namegen_generate;
    alias nothrow char* function(char*, char*, uint8) da_TCOD_namegen_generate_custom;
    alias nothrow TCOD_list_t function() da_TCOD_namegen_get_sets;
    alias nothrow void function() da_TCOD_namegen_destroy;

    // noise.h
    alias nothrow TCOD_noise_t function(int, float, float, TCOD_random_t) da_TCOD_noise_new;
    alias nothrow void function(TCOD_noise_t, TCOD_noise_type_t) da_TCOD_noise_set_type;
    alias nothrow float function(TCOD_noise_t, float*, TCOD_noise_type_t) da_TCOD_noise_get_ex;
    alias nothrow float function(TCOD_noise_t, float*, float, TCOD_noise_type_t) da_TCOD_noise_get_fbm_ex;
    alias nothrow float function(TCOD_noise_t, float*, float, TCOD_noise_type_t) da_TCOD_noise_get_turbulence_ex;
    alias nothrow float function(TCOD_noise_t, float *) da_TCOD_noise_get;
    alias nothrow float function(TCOD_noise_t, float*, float) da_TCOD_noise_get_fbm;
    alias nothrow float function(TCOD_noise_t, float*, float) da_TCOD_noise_get_turbulence;
    alias nothrow void function(TCOD_noise_t) da_TCOD_noise_delete;

    // parser.h
    alias nothrow TCOD_parser_t function() da_TCOD_parser_new;
    alias nothrow TCOD_parser_struct_t function(TCOD_parser_t, char*) da_TCOD_parser_new_struct;
    alias nothrow void function(TCOD_parser_t, const(char)*, TCOD_parser_listener_t*) da_TCOD_parser_run;
    alias nothrow void function(TCOD_parser_t) da_TCOD_parser_delete;
    alias nothrow void function(const(char)*, ...) da_TCOD_parser_error;
    alias uint8 function(TCOD_parser_t, const(char)*) da_TCOD_parser_get_bool_property;
    alias int function(TCOD_parser_t, const(char)*) da_TCOD_parser_get_char_property;
    alias int function(TCOD_parser_t, const(char)*) da_TCOD_parser_get_int_property;
    alias float function(TCOD_parser_t, const(char)*) da_TCOD_parser_get_float_property;
    alias const(char)* function(TCOD_parser_t, const(char)*) da_TCOD_parser_get_string_property;
    alias TCOD_color_t function(TCOD_parser_t, const(char)*) da_TCOD_parser_get_color_property;
    alias TCOD_dice_t function(TCOD_parser_t, const(char)*) da_TCOD_parser_get_dice_property;
    alias void function(TCOD_parser_t, const(char)*, TCOD_dice_t*) da_TCOD_parser_get_dice_property_py;
    alias void* function(TCOD_parser_t, const(char)*) da_TCOD_parser_get_custom_property;
    alias TCOD_list_t function(TCOD_parser_t, const(char)*, TCOD_value_type_t) da_TCOD_parser_get_list_property;

    // path.h
    alias nothrow TCOD_path_t function(TCOD_map_t, float) da_TCOD_path_new_using_map;
    alias nothrow TCOD_path_t function(int, int, TCOD_path_func_t, void*, float) da_TCOD_path_new_using_function;
    alias nothrow uint8 function(TCOD_path_t, int, int, int, int) da_TCOD_path_compute;
    alias nothrow uint8 function(TCOD_path_t, int*, int*, uint8) da_TCOD_path_walk;
    alias nothrow uint8 function(TCOD_path_t) da_TCOD_path_is_empty;
    alias nothrow int function(TCOD_path_t) da_TCOD_path_size;
    alias nothrow void function(TCOD_path_t) da_TCOD_path_reverse;
    alias nothrow void function(TCOD_path_t, int, int*, int*) da_TCOD_path_get;
    alias nothrow void function(TCOD_path_t, int*, int*) da_TCOD_path_get_origin;
    alias nothrow void function(TCOD_path_t, int*, int*) da_TCOD_path_get_destination;
    alias nothrow void function(TCOD_path_t) da_TCOD_path_delete;
    alias nothrow TCOD_dijkstra_t function(TCOD_map_t, float) da_TCOD_dijkstra_new;
    alias nothrow TCOD_dijkstra_t function(int, int, TCOD_path_func_t, void*, float) da_TCOD_dijkstra_new_using_function;
    alias nothrow void function(TCOD_dijkstra_t, int, int) da_TCOD_dijkstra_compute;
    alias nothrow float function(TCOD_dijkstra_t, int, int) da_TCOD_dijkstra_get_distance;
    alias nothrow uint8 function(TCOD_dijkstra_t, int, int) da_TCOD_dijkstra_path_set;
    alias nothrow uint8 function(TCOD_dijkstra_t) da_TCOD_dijkstra_is_empty;
    alias nothrow int function(TCOD_heightmap_t) da_TCOD_dijkstra_size;
    alias nothrow void function(TCOD_dijkstra_t) da_TCOD_dijkstra_reverse;
    alias nothrow void function(TCOD_dijkstra_t, int, int*, int*) da_TCOD_dijkstra_get;
    alias nothrow uint8 function(TCOD_dijkstra_t, int*, int*) da_TCOD_dijkstra_path_walk;
    alias nothrow void function(TCOD_dijkstra_t) da_TCOD_dijkstra_delete;

    // sys.h
    alias nothrow uint32 function() da_TCOD_sys_elapsed_milli;
    alias nothrow float function() da_TCOD_sys_elapsed_seconds;
    alias nothrow void function(uint32) da_TCOD_sys_sleep_milli;
    alias nothrow void function(const(char)*) da_TCOD_sys_save_screenshot;
    alias nothrow void function(int, int) da_TCOD_sys_force_fullscreen_resolution;
    alias nothrow void function(TCOD_renderer_t) da_TCOD_sys_set_renderer;
    alias nothrow TCOD_renderer_t function() da_TCOD_sys_get_renderer;
    alias nothrow void function(int) da_TCOD_sys_set_fps;
    alias nothrow int function() da_TCOD_sys_get_fps;
    alias nothrow float function() da_TCOD_sys_get_last_frame_length;
    alias nothrow void function(int*, int*) da_TCOD_sys_get_current_resolution;
    alias nothrow void function(int*, int*) da_TCOD_sys_get_fullscreen_offsets;
    alias nothrow void function(int, int, int, TCOD_image_t, int, int) da_TCOD_sys_update_char;
    alias nothrow void function(int*, int*) da_TCOD_sys_get_char_size;
    // alias nothrow void* function() da_TCOD_sys_get_sdl_window;
    alias nothrow TCOD_event_t function(int, TCOD_key_t*, TCOD_mouse_t*, uint8) da_TCOD_sys_wait_for_event;
    alias nothrow TCOD_event_t function(int, TCOD_key_t*, TCOD_mouse_t*) da_TCOD_sys_check_for_event;
    alias nothrow uint8 function(const(char*)) da_TCOD_sys_create_directory;
    alias nothrow uint8 function(const(char*)) da_TCOD_sys_delete_file;
    alias nothrow uint8 function(const(char*)) da_TCOD_sys_delete_directory;
    alias nothrow uint8 function(const(char*)) da_TCOD_sys_is_directory;
    alias nothrow TCOD_list_t function(const(char)*, const(char)*) da_TCOD_sys_get_directory_content;
    alias nothrow uint8 function(const(char)*, ...) da_TCOD_sys_file_exists;
    alias nothrow uint8 function(const(char)*, ubyte**, uint32*) da_TCOD_sys_read_file;
    alias nothrow uint8 function(const(char)*, ubyte*, uint32) da_TCOD_sys_write_file;
    alias nothrow void function(const(char)*) da_TCOD_sys_clipboard_set;
    alias nothrow char* function() da_TCOD_sys_clipboard_get;
    alias nothrow TCOD_thread_t function(int function(void*), void*) da_TCOD_thread_new;
    alias nothrow void function(TCOD_thread_t) da_TCOD_thread_delete;
    alias nothrow int function() da_TCOD_sys_get_num_cores;
    alias nothrow void function(TCOD_thread_t) da_TCOD_thread_wait;
    alias nothrow TCOD_mutex_t function() da_TCOD_mutex_new;
    alias nothrow void function(TCOD_mutex_t) da_TCOD_mutex_in;
    alias nothrow void function(TCOD_mutex_t) da_TCOD_mutex_out;
    alias nothrow void function(TCOD_mutex_t) da_TCOD_mutex_delete;
    alias nothrow TCOD_semaphore_t function(int) da_TCOD_semaphore_new;
    alias nothrow void function(TCOD_semaphore_t) da_TCOD_semaphore_lock;
    alias nothrow void function(TCOD_semaphore_t) da_TCOD_semaphore_unlock;
    alias nothrow void function(TCOD_semaphore_t) da_TCOD_semaphore_delete;
    alias nothrow TCOD_cond_t function() da_TCOD_condition_new;
    alias nothrow void function(TCOD_cond_t) da_TCOD_condition_signal;
    alias nothrow void function(TCOD_cond_t) da_TCOD_condition_broadcast;
    alias nothrow void function(TCOD_cond_t, TCOD_mutex_t) da_TCOD_condition_wait;
    alias nothrow void function(TCOD_cond_t) da_TCOD_condition_delete;
    alias nothrow TCOD_library_t function(const(char)*) da_TCOD_load_library;
    alias nothrow void* function(TCOD_library_t, const(char)*) da_TCOD_get_function_address;
    alias nothrow void function(TCOD_library_t) da_TCOD_close_library;
    alias nothrow void function(SDL_renderer_t) da_TCOD_sys_register_SDL_renderer;

    // tree.h
    alias nothrow TCOD_tree_t* function() da_TCOD_tree_new;
    alias nothrow void function(TCOD_tree_t*, TCOD_tree_t*) da_TCOD_tree_add_son;

    // txtfield.h
    alias nothrow TCOD_text_t function(int, int, int, int, int) da_TCOD_text_init;
    alias nothrow void function(TCOD_text_t, int, int, const(char)*, int) da_TCOD_text_set_properties;
    alias nothrow void function(TCOD_text_t, TCOD_color_t, TCOD_color_t, float) da_TCOD_text_set_colors;
    alias nothrow uint8 function(TCOD_text_t, TCOD_key_t) da_TCOD_text_update;
    alias nothrow void function(TCOD_text_t, TCOD_console_t) da_TCOD_text_render;
    alias nothrow const(char)* function(TCOD_text_t) da_TCOD_text_get;
    alias nothrow void function(TCOD_text_t) da_TCOD_text_reset;
    alias nothrow void function(TCOD_text_t) da_TCOD_text_delete;

    // zip.h
    alias nothrow TCOD_zip_t function() da_TCOD_zip_new;
    alias nothrow void function(TCOD_zip_t) da_TCOD_zip_delete;
    alias nothrow void function(TCOD_zip_t, char) da_TCOD_zip_put_char;
    alias nothrow void function(TCOD_zip_t, int) da_TCOD_zip_put_int;
    alias nothrow void function(TCOD_zip_t, float) da_TCOD_zip_put_float;
    alias nothrow void function(TCOD_zip_t, const(char)*) da_TCOD_zip_put_string;
    alias nothrow void function(TCOD_zip_t, const(TCOD_color_t)) da_TCOD_zip_put_color;
    alias nothrow void function(TCOD_zip_t, const(TCOD_image_t)) da_TCOD_zip_put_image;
    alias nothrow void function(TCOD_zip_t, const(TCOD_console_t)) da_TCOD_zip_put_console;
    alias nothrow void function(TCOD_zip_t, const(void)*) da_TCOD_zip_put_data;
    alias nothrow uint32 function(TCOD_zip_t) da_TCOD_zip_get_current_bytes;
    alias nothrow void function(TCOD_zip_t, const(char)*) da_TCOD_zip_save_to_file;
    alias nothrow int function(TCOD_zip_t, const(char)*) da_TCOD_zip_load_from_file;
    alias nothrow char function(TCOD_zip_t) da_TCOD_zip_get_char;
    alias nothrow int function(TCOD_zip_t) da_TCOD_zip_get_int;
    alias nothrow float function(TCOD_zip_t) da_TCOD_zip_get_float;
    alias nothrow const(char)* function(TCOD_zip_t) da_TCOD_zip_get_string;
    alias nothrow TCOD_color_t function(TCOD_zip_t) da_TCOD_zip_get_color;
    alias nothrow TCOD_image_t function(TCOD_zip_t) da_TCOD_zip_get_image;
    alias nothrow TCOD_console_t function(TCOD_zip_t) da_TCOD_zip_get_console;
    alias nothrow int function(TCOD_zip_t, int, void*) da_TCOD_zip_get_data;
    alias nothrow uint32 function(TCOD_zip_t) da_TCOD_zip_get_remaining_bytes;
    alias nothrow void function(TCOD_zip_t) da_TCOD_zip_skip_bytes;
}

__gshared
{
    // bresenham.h
    da_TCOD_line_init TCOD_line_init;
    da_TCOD_line_step TCOD_line_step;
    da_TCOD_line TCOD_line;
    da_TCOD_line_init_mt TCOD_line_init_mt;
    da_TCOD_line_step_mt TCOD_line_step_mt;
    da_TCOD_line_mt TCOD_line_mt;

    // bsp.h
    da_TCOD_bsp_new TCOD_bsp_new;
    da_TCOD_bsp_new_with_size TCOD_bsp_new_with_size;
    da_TCOD_bsp_delete TCOD_bsp_delete;
    da_TCOD_bsp_left TCOD_bsp_left;
    da_TCOD_bsp_right TCOD_bsp_right;
    da_TCOD_bsp_father TCOD_bsp_father;
    da_TCOD_bsp_is_leaf TCOD_bsp_is_leaf;
    da_TCOD_bsp_traverse_pre_order TCOD_bsp_traverse_pre_order;
    da_TCOD_bsp_traverse_in_order TCOD_bsp_traverse_in_order;
    da_TCOD_bsp_traverse_post_order TCOD_bsp_traverse_post_order;
    da_TCOD_bsp_traverse_level_order TCOD_bsp_traverse_level_order;
    da_TCOD_bsp_traverse_inverted_level_order TCOD_bsp_traverse_inverted_level_order;
    da_TCOD_bsp_contains TCOD_bsp_contains;
    da_TCOD_bsp_find_node TCOD_bsp_find_node;
    da_TCOD_bsp_resize TCOD_bsp_resize;
    da_TCOD_bsp_split_once TCOD_bsp_split_once;
    da_TCOD_bsp_split_recursive TCOD_bsp_split_recursive;
    da_TCOD_bsp_remove_sons TCOD_bsp_remove_sons;

    // color.h
    da_TCOD_color_RGB TCOD_color_RGB;
    da_TCOD_color_HSV TCOD_color_HSV;
    da_TCOD_color_equals TCOD_color_equals;
    da_TCOD_color_add TCOD_color_add;
    da_TCOD_color_subtract TCOD_color_subtract;
    da_TCOD_color_multiply TCOD_color_multiply;
    da_TCOD_color_multiply_scalar TCOD_color_multiply_scalar;
    da_TCOD_color_lerp TCOD_color_lerp;
    da_TCOD_color_set_HSV TCOD_color_set_HSV;
    da_TCOD_color_get_HSV TCOD_color_get_HSV;
    da_TCOD_color_get_hue TCOD_color_get_hue;
    da_TCOD_color_set_hue TCOD_color_set_hue;
    da_TCOD_color_get_saturation TCOD_color_get_saturation;
    da_TCOD_color_set_saturation TCOD_color_set_saturation;
    da_TCOD_color_get_value TCOD_color_get_value;
    da_TCOD_color_set_value TCOD_color_set_value;
    da_TCOD_color_shift_hue TCOD_color_shift_hue;
    da_TCOD_color_scale_HSV TCOD_color_scale_HSV;
    da_TCOD_color_gen_map TCOD_color_gen_map;

    // console.h
    da_TCOD_console_init_root TCOD_console_init_root;
    da_TCOD_console_set_window_title TCOD_console_set_window_title;
    da_TCOD_console_set_fullscreen TCOD_console_set_fullscreen;
    da_TCOD_console_is_fullscreen TCOD_console_is_fullscreen;
    da_TCOD_console_is_window_closed TCOD_console_is_window_closed;
    da_TCOD_console_set_custom_font TCOD_console_set_custom_font;
    da_TCOD_console_map_ascii_code_to_font TCOD_console_map_ascii_code_to_font;
    da_TCOD_console_map_ascii_codes_to_font TCOD_console_map_ascii_codes_to_font;
    da_TCOD_console_map_string_to_font TCOD_console_map_string_to_font;
    da_TCOD_console_set_dirty TCOD_console_set_dirty;
    da_TCOD_console_set_default_background TCOD_console_set_default_background;
    da_TCOD_console_set_default_foreground TCOD_console_set_default_foreground;
    da_TCOD_console_clear TCOD_console_clear;
    da_TCOD_console_set_char_background TCOD_console_set_char_background;
    da_TCOD_console_set_char_foreground TCOD_console_set_char_foreground;
    da_TCOD_console_set_char TCOD_console_set_char;
    da_TCOD_console_put_char TCOD_console_put_char;
    da_TCOD_console_put_char_ex TCOD_console_put_char_ex;
    da_TCOD_console_set_background_flag TCOD_console_set_background_flag;
    da_TCOD_console_get_background_flag TCOD_console_get_background_flag;
    da_TCOD_console_set_alignment TCOD_console_set_alignment;
    da_TCOD_console_get_alignment TCOD_console_get_alignment;
    da_TCOD_console_print TCOD_console_print;
    da_TCOD_console_print_ex TCOD_console_print_ex;
    da_TCOD_console_print_rect TCOD_console_print_rect;
    da_TCOD_console_print_rect_ex TCOD_console_print_rect_ex;
    da_TCOD_console_get_height_rect TCOD_console_get_height_rect;
    da_TCOD_console_rect TCOD_console_rect;
    da_TCOD_console_hline TCOD_console_hline;
    da_TCOD_console_vline TCOD_console_vline;
    da_TCOD_console_print_frame TCOD_console_print_frame;

    static if(!noUnicode)
    {
        da_TCOD_console_map_string_to_font_utf TCOD_console_map_string_to_font_utf;
        da_TCOD_console_print_utf TCOD_console_print_utf;
        da_TCOD_console_print_ex_utf TCOD_console_print_ex_utf;
        da_TCOD_console_print_rect_utf TCOD_console_print_rect_utf;
        da_TCOD_console_print_rect_ex_utf TCOD_console_print_rect_ex_utf;
        da_TCOD_console_get_height_rect_utf TCOD_console_get_height_rect_utf;
    }

    da_TCOD_console_get_default_background TCOD_console_get_default_background;
    da_TCOD_console_get_default_foreground TCOD_console_get_default_foreground;
    da_TCOD_console_get_char_background TCOD_console_get_char_background;
    da_TCOD_console_get_char_foreground TCOD_console_get_char_foreground;
    da_TCOD_console_get_char TCOD_console_get_char;
    da_TCOD_console_set_fade TCOD_console_set_fade;
    da_TCOD_console_get_fade TCOD_console_get_fade;
    da_TCOD_console_get_fading_color TCOD_console_get_fading_color;
    da_TCOD_console_flush TCOD_console_flush;
    da_TCOD_console_set_color_control TCOD_console_set_color_control;
    da_TCOD_console_check_for_keypress TCOD_console_check_for_keypress;
    da_TCOD_console_wait_for_keypress TCOD_console_wait_for_keypress;
    da_TCOD_console_set_keyboard_repeat TCOD_console_set_keyboard_repeat;
    da_TCOD_console_disable_keyboard_repeat TCOD_console_disable_keyboard_repeat;
    da_TCOD_console_is_key_pressed TCOD_console_is_key_pressed;
    da_TCOD_console_from_file TCOD_console_from_file;
    da_TCOD_console_load_asc TCOD_console_load_asc;
    da_TCOD_console_load_apf TCOD_console_load_apf;
    da_TCOD_console_save_asc TCOD_console_save_asc;
    da_TCOD_console_save_apf TCOD_console_save_apf;
    da_TCOD_console_new TCOD_console_new;
    da_TCOD_console_get_width TCOD_console_get_width;
    da_TCOD_console_get_height TCOD_console_get_height;
    da_TCOD_console_set_key_color TCOD_console_set_key_color;
    da_TCOD_console_blit TCOD_console_blit;
    da_TCOD_console_delete TCOD_console_delete;
    da_TCOD_console_credits TCOD_console_credits;
    da_TCOD_console_credits_reset TCOD_console_credits_reset;
    da_TCOD_console_credits_render TCOD_console_credits_render;

    // fov.h
    da_TCOD_map_new TCOD_map_new;
    da_TCOD_map_clear TCOD_map_clear;
    da_TCOD_map_copy TCOD_map_copy;
    da_TCOD_map_set_properties TCOD_map_set_properties;
    da_TCOD_map_delete TCOD_map_delete;
    da_TCOD_map_compute_fov TCOD_map_compute_fov;
    da_TCOD_map_is_in_fov TCOD_map_is_in_fov;
    da_TCOD_map_set_in_fov TCOD_map_set_in_fov;
    da_TCOD_map_is_transparent TCOD_map_is_transparent;
    da_TCOD_map_is_walkable TCOD_map_is_walkable;
    da_TCOD_map_get_width TCOD_map_get_width;
    da_TCOD_map_get_height TCOD_map_get_height;
    da_TCOD_map_get_nb_cells TCOD_map_get_nb_cells;

    // heightmap.h
    da_TCOD_heightmap_new TCOD_heightmap_new;
    da_TCOD_heightmap_delete TCOD_heightmap_delete;
    da_TCOD_heightmap_get_value TCOD_heightmap_get_value;
    da_TCOD_heightmap_get_interpolated_value TCOD_heightmap_get_interpolated_value;
    da_TCOD_heightmap_set_value TCOD_heightmap_set_value;
    da_TCOD_heightmap_get_slope TCOD_heightmap_get_slope;
    da_TCOD_heightmap_get_normal TCOD_heightmap_get_normal;
    da_TCOD_heightmap_count_cells TCOD_heightmap_count_cells;
    da_TCOD_heightmap_has_land_on_border TCOD_heightmap_has_land_on_border;
    da_TCOD_heightmap_get_minmax TCOD_heightmap_get_minmax;
    da_TCOD_heightmap_copy TCOD_heightmap_copy;
    da_TCOD_heightmap_add TCOD_heightmap_add;
    da_TCOD_heightmap_scale TCOD_heightmap_scale;
    da_TCOD_heightmap_clamp TCOD_heightmap_clamp;
    da_TCOD_heightmap_normalize TCOD_heightmap_normalize;
    da_TCOD_heightmap_clear TCOD_heightmap_clear;
    da_TCOD_heightmap_lerp_hm TCOD_heightmap_lerp_hm;
    da_TCOD_heightmap_add_hm TCOD_heightmap_add_hm;
    da_TCOD_heightmap_multiply_hm TCOD_heightmap_multiply_hm;
    da_TCOD_heightmap_add_hill TCOD_heightmap_add_hill;
    da_TCOD_heightmap_dig_hill TCOD_heightmap_dig_hill;
    da_TCOD_heightmap_dig_bezier TCOD_heightmap_dig_bezier;
    da_TCOD_heightmap_rain_erosion TCOD_heightmap_rain_erosion;
    da_TCOD_heightmap_kernel_transform TCOD_heightmap_kernel_transform;
    da_TCOD_heightmap_add_voronoi TCOD_heightmap_add_voronoi;
    da_TCOD_heightmap_add_fbm TCOD_heightmap_add_fbm;
    da_TCOD_heightmap_scale_fbm TCOD_heightmap_scale_fbm;
    da_TCOD_heightmap_islandify TCOD_heightmap_islandify;

    // image.h
    da_TCOD_image_new TCOD_image_new;
    da_TCOD_image_from_console TCOD_image_from_console;
    da_TCOD_image_refresh_console TCOD_image_refresh_console;
    da_TCOD_image_load TCOD_image_load;
    da_TCOD_image_clear TCOD_image_clear;
    da_TCOD_image_invert TCOD_image_invert;
    da_TCOD_image_hflip TCOD_image_hflip;
    da_TCOD_image_rotate90 TCOD_image_rotate90;
    da_TCOD_image_vflip TCOD_image_vflip;
    da_TCOD_image_scale TCOD_image_scale;
    da_TCOD_image_save TCOD_image_save;
    da_TCOD_image_get_size TCOD_image_get_size;
    da_TCOD_image_get_pixel TCOD_image_get_pixel;
    da_TCOD_image_get_alpha TCOD_image_get_alpha;
    da_TCOD_image_get_mipmap_pixel TCOD_image_get_mipmap_pixel;
    da_TCOD_image_put_pixel TCOD_image_put_pixel;
    da_TCOD_image_blit TCOD_image_blit;
    da_TCOD_image_blit_rect TCOD_image_blit_rect;
    da_TCOD_image_blit_2x TCOD_image_blit_2x;
    da_TCOD_image_delete TCOD_image_delete;
    da_TCOD_image_set_key_color TCOD_image_set_key_color;
    da_TCOD_image_is_pixel_transparent TCOD_image_is_pixel_transparent;

    // list.h
    da_TCOD_list_new TCOD_list_new;
    da_TCOD_list_allocate TCOD_list_allocate;
    da_TCOD_list_duplicate TCOD_list_duplicate;
    da_TCOD_list_delete TCOD_list_delete;
    da_TCOD_list_push TCOD_list_push;
    da_TCOD_list_pop TCOD_list_pop;
    da_TCOD_list_peek TCOD_list_peek;
    da_TCOD_list_add_all TCOD_list_add_all;
    da_TCOD_list_get TCOD_list_get;
    da_TCOD_list_set TCOD_list_set;
    da_TCOD_list_begin TCOD_list_begin;
    da_TCOD_list_end TCOD_list_end;
    da_TCOD_list_reverse TCOD_list_reverse;
    da_TCOD_list_remove_iterator TCOD_list_remove_iterator;
    da_TCOD_list_remove TCOD_list_remove;
    da_TCOD_list_remove_iterator_fast TCOD_list_remove_iterator_fast;
    da_TCOD_list_remove_fast TCOD_list_remove_fast;
    da_TCOD_list_contains TCOD_list_contains;
    da_TCOD_list_clear TCOD_list_clear;
    da_TCOD_list_clear_and_delete TCOD_list_clear_and_delete;
    da_TCOD_list_size TCOD_list_size;
    da_TCOD_list_insert_before TCOD_list_insert_before;
    da_TCOD_list_is_empty TCOD_list_is_empty;

    // mersenne.h
    da_TCOD_random_get_instance TCOD_random_get_instance;
    da_TCOD_random_new TCOD_random_new;
    da_TCOD_random_save TCOD_random_save;
    da_TCOD_random_restore TCOD_random_restore;
    da_TCOD_random_new_from_seed TCOD_random_new_from_seed;
    da_TCOD_random_delete TCOD_random_delete;
    da_TCOD_random_set_distribution TCOD_random_set_distribution;
    da_TCOD_random_get_int TCOD_random_get_int;
    da_TCOD_random_get_float TCOD_random_get_float;
    da_TCOD_random_get_double TCOD_random_get_double;
    da_TCOD_random_get_int_mean TCOD_random_get_int_mean;
    da_TCOD_random_get_float_mean TCOD_random_get_float_mean;
    da_TCOD_random_get_double_mean TCOD_random_get_double_mean;
    da_TCOD_random_dice_new TCOD_random_dice_new;
    da_TCOD_random_dice_roll TCOD_random_dice_roll;
    da_TCOD_random_dice_roll_s TCOD_random_dice_roll_s;

    // mouse.h
    da_TCOD_mouse_show_cursor TCOD_mouse_show_cursor;
    da_TCOD_mouse_get_status TCOD_mouse_get_status;
    da_TCOD_mouse_is_cursor_visible TCOD_mouse_is_cursor_visible;
    da_TCOD_mouse_move TCOD_mouse_move;
    //da_TCOD_mouse_includes_touch TCOD_mouse_includes_touch;

    // namegen.h
    da_TCOD_namegen_parse TCOD_namegen_parse;
    da_TCOD_namegen_generate TCOD_namegen_generate;
    da_TCOD_namegen_generate_custom TCOD_namegen_generate_custom;
    da_TCOD_namegen_get_sets TCOD_namegen_get_sets;
    da_TCOD_namegen_destroy TCOD_namegen_destroy;

    // noise.h
    da_TCOD_noise_new TCOD_noise_new;
    da_TCOD_noise_set_type TCOD_noise_set_type;
    da_TCOD_noise_get_ex TCOD_noise_get_ex;
    da_TCOD_noise_get_fbm_ex TCOD_noise_get_fbm_ex;
    da_TCOD_noise_get_turbulence_ex TCOD_noise_get_turbulence_ex;
    da_TCOD_noise_get TCOD_noise_get;
    da_TCOD_noise_get_fbm TCOD_noise_get_fbm;
    da_TCOD_noise_get_turbulence TCOD_noise_get_turbulence;
    da_TCOD_noise_delete TCOD_noise_delete;

    // parser.h
    da_TCOD_parser_new TCOD_parser_new;
    da_TCOD_parser_new_struct TCOD_parser_new_struct;
    da_TCOD_parser_run TCOD_parser_run;
    da_TCOD_parser_delete TCOD_parser_delete;
    da_TCOD_parser_error TCOD_parser_error;
    da_TCOD_parser_get_bool_property TCOD_parser_get_bool_property;
    da_TCOD_parser_get_char_property TCOD_parser_get_char_property;
    da_TCOD_parser_get_int_property TCOD_parser_get_int_property;
    da_TCOD_parser_get_float_property TCOD_parser_get_float_property;
    da_TCOD_parser_get_string_property TCOD_parser_get_string_property;
    da_TCOD_parser_get_color_property TCOD_parser_get_color_property;
    da_TCOD_parser_get_dice_property TCOD_parser_get_dice_property;
    da_TCOD_parser_get_dice_property_py TCOD_parser_get_dice_property_py;
    da_TCOD_parser_get_custom_property TCOD_parser_get_custom_property;
    da_TCOD_parser_get_list_property TCOD_parser_get_list_property;

    // path.h
    da_TCOD_path_new_using_map TCOD_path_new_using_map;
    da_TCOD_path_new_using_function TCOD_path_new_using_function;
    da_TCOD_path_compute TCOD_path_compute;
    da_TCOD_path_walk TCOD_path_walk;
    da_TCOD_path_is_empty TCOD_path_is_empty;
    da_TCOD_path_size TCOD_path_size;
    da_TCOD_path_reverse TCOD_path_reverse;
    da_TCOD_path_get TCOD_path_get;
    da_TCOD_path_get_origin TCOD_path_get_origin;
    da_TCOD_path_get_destination TCOD_path_get_destination;
    da_TCOD_path_delete TCOD_path_delete;
    da_TCOD_dijkstra_new TCOD_dijkstra_new;
    da_TCOD_dijkstra_new_using_function TCOD_dijkstra_new_using_function;
    da_TCOD_dijkstra_compute TCOD_dijkstra_compute;
    da_TCOD_dijkstra_get_distance TCOD_dijkstra_get_distance;
    da_TCOD_dijkstra_path_set TCOD_dijkstra_path_set;
    da_TCOD_dijkstra_is_empty TCOD_dijkstra_is_empty;
    da_TCOD_dijkstra_size TCOD_dijkstra_size;
    da_TCOD_dijkstra_reverse TCOD_dijkstra_reverse;
    da_TCOD_dijkstra_get TCOD_dijkstra_get;
    da_TCOD_dijkstra_path_walk TCOD_dijkstra_path_walk;
    da_TCOD_dijkstra_delete TCOD_dijkstra_delete;

    // sys.h
    da_TCOD_sys_elapsed_milli TCOD_sys_elapsed_milli;
    da_TCOD_sys_elapsed_seconds TCOD_sys_elapsed_seconds;
    da_TCOD_sys_sleep_milli TCOD_sys_sleep_milli;
    da_TCOD_sys_save_screenshot TCOD_sys_save_screenshot;
    da_TCOD_sys_force_fullscreen_resolution TCOD_sys_force_fullscreen_resolution;
    da_TCOD_sys_set_renderer TCOD_sys_set_renderer;
    da_TCOD_sys_get_renderer TCOD_sys_get_renderer;
    da_TCOD_sys_set_fps TCOD_sys_set_fps;
    da_TCOD_sys_get_fps TCOD_sys_get_fps;
    da_TCOD_sys_get_last_frame_length TCOD_sys_get_last_frame_length;
    da_TCOD_sys_get_current_resolution TCOD_sys_get_current_resolution;
    da_TCOD_sys_get_fullscreen_offsets TCOD_sys_get_fullscreen_offsets;
    da_TCOD_sys_update_char TCOD_sys_update_char;
    da_TCOD_sys_get_char_size TCOD_sys_get_char_size;
    // da_TCOD_sys_get_sdl_window TCOD_sys_get_sdl_window;
    da_TCOD_sys_wait_for_event TCOD_sys_wait_for_event;
    da_TCOD_sys_check_for_event TCOD_sys_check_for_event;
    da_TCOD_sys_create_directory TCOD_sys_create_directory;
    da_TCOD_sys_delete_file TCOD_sys_delete_file;
    da_TCOD_sys_delete_directory TCOD_sys_delete_directory;
    da_TCOD_sys_is_directory TCOD_sys_is_directory;
    da_TCOD_sys_get_directory_content TCOD_sys_get_directory_content;
    da_TCOD_sys_file_exists TCOD_sys_file_exists;
    da_TCOD_sys_read_file TCOD_sys_read_file;
    da_TCOD_sys_write_file TCOD_sys_write_file;
    da_TCOD_sys_clipboard_set TCOD_sys_clipboard_set;
    da_TCOD_sys_clipboard_get TCOD_sys_clipboard_get;
    da_TCOD_thread_new TCOD_thread_new;
    da_TCOD_thread_delete TCOD_thread_delete;
    da_TCOD_sys_get_num_cores TCOD_sys_get_num_cores;
    da_TCOD_thread_wait TCOD_thread_wait;
    da_TCOD_mutex_new TCOD_mutex_new;
    da_TCOD_mutex_in TCOD_mutex_in;
    da_TCOD_mutex_out TCOD_mutex_out;
    da_TCOD_mutex_delete TCOD_mutex_delete;
    da_TCOD_semaphore_new TCOD_semaphore_new;
    da_TCOD_semaphore_lock TCOD_semaphore_lock;
    da_TCOD_semaphore_unlock TCOD_semaphore_unlock;
    da_TCOD_semaphore_delete TCOD_semaphore_delete;
    da_TCOD_condition_new TCOD_condition_new;
    da_TCOD_condition_signal TCOD_condition_signal;
    da_TCOD_condition_broadcast TCOD_condition_broadcast;
    da_TCOD_condition_wait TCOD_condition_wait;
    da_TCOD_condition_delete TCOD_condition_delete;
    da_TCOD_load_library TCOD_load_library;
    da_TCOD_get_function_address TCOD_get_function_address;
    da_TCOD_close_library TCOD_close_library;
    da_TCOD_sys_register_SDL_renderer TCOD_sys_register_SDL_renderer;

    // tree.h
    da_TCOD_tree_new TCOD_tree_new;
    da_TCOD_tree_add_son TCOD_tree_add_son;

    // txtfield.h
    da_TCOD_text_init TCOD_text_init;
    da_TCOD_text_set_properties TCOD_text_set_properties;
    da_TCOD_text_set_colors TCOD_text_set_colors;
    da_TCOD_text_update TCOD_text_update;
    da_TCOD_text_render TCOD_text_render;
    da_TCOD_text_get TCOD_text_get;
    da_TCOD_text_reset TCOD_text_reset;
    da_TCOD_text_delete TCOD_text_delete;

    // zip.h
    da_TCOD_zip_new TCOD_zip_new;
    da_TCOD_zip_delete TCOD_zip_delete;
    da_TCOD_zip_put_char TCOD_zip_put_char;
    da_TCOD_zip_put_int TCOD_zip_put_int;
    da_TCOD_zip_put_float TCOD_zip_put_float;
    da_TCOD_zip_put_string TCOD_zip_put_string;
    da_TCOD_zip_put_color TCOD_zip_put_color;
    da_TCOD_zip_put_image TCOD_zip_put_image;
    da_TCOD_zip_put_console TCOD_zip_put_console;
    da_TCOD_zip_put_data TCOD_zip_put_data;
    da_TCOD_zip_get_current_bytes TCOD_zip_get_current_bytes;
    da_TCOD_zip_save_to_file TCOD_zip_save_to_file;
    da_TCOD_zip_load_from_file TCOD_zip_load_from_file;
    da_TCOD_zip_get_char TCOD_zip_get_char;
    da_TCOD_zip_get_int TCOD_zip_get_int;
    da_TCOD_zip_get_float TCOD_zip_get_float;
    da_TCOD_zip_get_string TCOD_zip_get_string;
    da_TCOD_zip_get_color TCOD_zip_get_color;
    da_TCOD_zip_get_image TCOD_zip_get_image;
    da_TCOD_zip_get_console TCOD_zip_get_console;
    da_TCOD_zip_get_data TCOD_zip_get_data;
    da_TCOD_zip_get_remaining_bytes TCOD_zip_get_remaining_bytes;
    da_TCOD_zip_skip_bytes TCOD_zip_skip_bytes;
}
